home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / comm / irc / epic4-mos.lha / share / epic / script / mail < prev    next >
Text File  |  2002-09-18  |  4KB  |  156 lines

  1. # mail script.  lifted from anduril by wd.
  2. # this script is in the public domain
  3.  
  4. # $Id: mail,v 1.2 2002/08/01 00:51:08 wd Exp $
  5.  
  6. # this module is intended as a replacement for the built-in functionality of
  7. # epic's mail code.  currently it only handles mbox-style mail boxes.  it
  8. # allows the user to add and remove mboxes as desired, and change the
  9. # checking time.
  10.  
  11. # you can /set mail_watch_time to change the time interval for scanning for
  12. # new mail
  13. # this script honors /set mail to completely enable/disable checking.
  14. #
  15. # you can use the /mbox command to list details about currently added
  16. # mailboxes.  you can also use it to add or delete folders from the list.
  17.  
  18. @mail.folders = getenv(MAIL)
  19.  
  20. ^on ^set "mail_watch_time *" {
  21.     if ([$1] == []) {
  22.     echo $banner Current value of MAIL_WATCH_TIME is $mail.time
  23.     return
  24.     }
  25.     if (mail.time > 0) {
  26.     ^timer -del mailcheck
  27.     }
  28.  
  29.     if ([$1] > 0) {
  30.     @mail.time = [$1]
  31.     ^timer -refnum mailcheck -rep -1 $mail.time mail.check
  32.     }
  33.     echo $banner Value of MAIL_WATCH_TIME set to $mail.time
  34. }
  35.  
  36. alias mbox (cmd, args) {
  37.     if (cmd != [] && cmd != [list] && numwords($args) != 1) {
  38.     echo [mail] usage: /mbox [add|del|list] [folder]
  39.     return
  40.     } else if (cmd == []) {
  41.     @:cmd = [list]
  42.     }
  43.  
  44.     @:folder = twiddle($args)
  45.  
  46.     switch ($cmd) {
  47.     (add) {
  48.         if (findw($folder $mail.folders) != -1) {
  49.         echo [mail] folder $args is already being monitored
  50.         return
  51.         }
  52.  
  53.         @:stat = stat($folder)
  54.         if (stat == []) {
  55.         echo [mail] stat\($folder\) failed.  either the file is not accesible or the system does not support stat(2).
  56.         return
  57.         }
  58.         @push(mail.folders $folder)
  59.         @push(mail.times $word(11 $stat))
  60.         
  61.         echo [mail] now monitoring $folder for new mail
  62.     }
  63.     (del) {
  64.         if (findw($folder $mail.folders) == -1) {
  65.         echo [mail] folder $folder is not being monitored
  66.         return
  67.         }
  68.  
  69.         @mail.folders = remw($folder $mail.folders)
  70.         echo [mail] no longer monitoring $folder for new mail
  71.     }
  72.     (list) {
  73.         @:mtot = 0
  74.         @:cols = word(0 $geom())
  75.         echo $pad(${cols - 40} \" \" folder) $pad(20 \" \" last modified) $pad(8 \" \" size) $pad(8 \" \" messages)
  76.         for xx in ($mail.folders) {
  77.         @:stat = stat($xx)
  78.         @:out = pad(${cols - 40} \" \" $xx)
  79.         if (stat != []) {
  80.             @:out #= [ $pad(20 \" \" $strftime($word(11 $stat) %d/%m/%Y %H:%M:%S))]
  81.             @:out #= [ $pad(8 \" \" $mail.size_fmt($word(7 $stat)))]
  82.         } else {
  83.             @:out #= [ $pad(20 \" \" unknown) $pad(8 \" \" unknown)]
  84.         }
  85.         @:mcnt = 0
  86.         @:fd = open($xx R)
  87.         if (fd > -1) {
  88.             while (!eof($fd)) {
  89.             if (word(1 $read($fd)) == [From]) {
  90.                 @:mcnt++
  91.             }
  92.             }
  93.         }
  94.         @close($fd)
  95.         @:out #= [ $pad(8 \" \" $mcnt)]
  96.         @:mtot += mcnt
  97.         echo $out
  98.         }
  99.     }
  100.     (*) {
  101.         echo [mail] usage: /mbox [add|del|list] [folder]
  102.     }
  103.     }
  104. }
  105.  
  106. alias mail.check {
  107.     if (numwords($mail.folders) == 0 || MAIL == 0 || MAIL == []) {
  108.     return
  109.     }
  110.  
  111.     for (@:i = 0,i < numwords($mail.folders),@:i++) {
  112.     @:folder = word($i $mail.folders)
  113.     @:stat = stat($folder)
  114.     if (stat == []) {
  115.         continue
  116.     }
  117.     if (word(11 $stat) > word($i $mail.times)) {
  118.         echo [mail] new mail in $folder \($strftime($word(11 $stat) %d/%m/%Y %H:%M:%S)\)
  119.         @mail.times = chngw($i $word(11 $stat) $mail.times)
  120.     }
  121.     }
  122. }
  123.  
  124. alias mail.size_fmt (n) {
  125.     stack push set floating_point_math
  126.     ^set floating_point_math on
  127.     if (!n) {
  128.     @function_return = [0b]
  129.     } elsif (n < 1024) {
  130.     @function_return = [${n}b]
  131.     } elsif (n < 1048576) {
  132.     @function_return = [$trunc(2 ${n / 1024})kb]
  133.     } elsif (n < 1073741824) {
  134.     @function_return = [$trunc(2 ${n / 1048576})mb]
  135.     } elsif (n < 1099511627776) {
  136.     @function_return = [$trunc(2 ${n / 1073741824})gb]
  137.     } else {
  138.     @function_return = [$trunc(2 ${n / 1099511627776})tb]
  139.     }
  140.     stack pop set floating_point_math
  141. }
  142.  
  143. for xx in ($mail.folders) {
  144.     @:stat = stat($xx)
  145.     if (stat == []) {
  146.     @mail.folders = remw($xx $mail.folders)
  147.     } else {
  148.     @push(mail.times $word(11 $stat))
  149.     }
  150. }
  151.  
  152. @mail.time = [60]
  153. ^timer -refnum mailcheck -rep -1 $mail.time mail.check
  154.  
  155. # vi:set ts=8 sts=4 sw=4 tw=79 syntax=off ai smartindent:
  156.